package puzzle.common.solver;

import java.util.HashSet;

import tomoto.util.Pair;

class FingerPrintDirectory {

	private Pair<HashSet<Object>> m_fingerPrintSets;

	private int m_limit;
	
	public FingerPrintDirectory(int limit) {
		m_fingerPrintSets = new Pair<HashSet<Object>>();
		m_fingerPrintSets.car = new HashSet<Object>();
		m_fingerPrintSets.cdr = new HashSet<Object>();
		m_limit = limit;
	}

	/**
	 * 指紋の記録の存在を確認して結果を返すとともに、記録がなければ記録する。
	 * 
	 * @param fingerPrint 指紋。nullも可。
	 * @return　記録のある指紋であればtrue、なければfalse。nullの場合、常にfalse。
	 */
	public boolean check(Object fingerPrint) {
		if (fingerPrint != null && m_fingerPrintSets.car.contains(fingerPrint)) {
			return true; // 記録があったと答える
		} else {
			// 記録がなかったので、記録する
			m_fingerPrintSets.car.add(fingerPrint);
			m_fingerPrintSets.cdr.add(fingerPrint);
			// 一定量を超えたらスワップし、古い方を削除
			if (m_fingerPrintSets.cdr.size() > m_limit) {
				m_fingerPrintSets.swap();
				m_fingerPrintSets.cdr.clear();
			}
			return false; // 記録がなかったと答える
		}
	}

}
